package com.utils;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
//
//import org.apache.solr.common.SolrDocument;
//import org.apache.solr.common.SolrDocumentList;

public class SolrUtils {
//    /**
//     *
//     * SolrDocument与实体类转换 [测试通过]
//     *
//     * @author pudongping
//     *
//     * @param document
//     *                     SolrDocument对象
//     * @param clzz
//     *                     泛型类
//     * @return <T>
//     */
//    public static <T> T solrDocument2Entity(SolrDocument document, Class<T> clzz) {
//        if (null != document) {
//            try {
//                Object obj = clzz.newInstance();
//                Method m = null;
//
//                Class<?> fieldType = null;
//
//                for (String fieldName : document.getFieldNames()) {
//
//                    //需要说明的是返回的结果集中的FieldNames()比类属性多
//                    Field[] filedArrays = clzz.getDeclaredFields();                        //获取类中所有属性
//                    for (Field f : filedArrays) {
//                        //如果实体属性名和查询返回集中的字段名一致,填充对应的set方法
//                        if(f.getName().equals(fieldName)){
//
//                            //获取到的属性名
//                            //private java.lang.String com.test.model.Article.id
//                            f = clzz.getDeclaredField(fieldName);
//
//                            //属性类型
//                            //private java.lang.String com.test.model.Article.id
//                            fieldType = f.getType();
//
//                            //构造set方法名  setId
//                            //String dynamicSetMethod = dynamicMethodName(f.getName(), "set");
//
//                            //获取方法
//                            //public void com.test.model.Article.setId(java.lang.String)
//                            //m = clzz.getMethod(dynamicSetMethod, fieldType);
//
//                            //获取到的值
//                            //LOG.info(f.getName() + "-->" + dynamicSetMethod+ "=" + fieldType.cast(document.getFieldValue(fieldName)));
//                            System.out.println(f.getName() + "-->=" + fieldType.cast(document.getFieldValue(fieldName)));
//
//                            // 如果是 int, float等基本类型，则需要转型
//                            if (fieldType.equals(Integer.TYPE)) {
//                                fieldType = Integer.class;
//                            } else if (fieldType.equals(Float.TYPE)) {
//                                fieldType = Float.class;
//                            } else if (fieldType.equals(Double.TYPE)) {
//                                fieldType = Double.class;
//                            } else if (fieldType.equals(Boolean.TYPE)) {
//                                fieldType = Boolean.class;
//                            } else if (fieldType.equals(Short.TYPE)) {
//                                fieldType = Short.class;
//                            } else if (fieldType.equals(Long.TYPE)) {
//                                fieldType = Long.class;
//                            } else if(fieldType.equals(String.class)){
//                                fieldType = String.class;
//                            }else if(fieldType.equals(Collection.class)){
//                                fieldType = Collection.class;
//                            }
//                            //m.invoke(obj, fieldType.cast(document.getFieldValue(fieldName)));
//                            f.setAccessible(true);
//                            f.set(obj, fieldType.cast(document.getFieldValue(fieldName)));
//                        }
//                    }
//
//                }
//                return clzz.cast(obj);
//            } catch (ClassCastException e) {
//                //LOG.error("请检查schema.xml中的各个field的数据类型与PO类的是否一致.",e);
//                e.printStackTrace();
//            } catch (SecurityException e) {
//                e.printStackTrace();
//            }
//            //catch (NoSuchMethodException e) {
//            //LOG.error("请检查PO类中的field对应的各个setter和getter是否存在.",e);
//            //e.printStackTrace();
//            //}
//            catch (IllegalArgumentException e) {
//                e.printStackTrace();
//            } catch (IllegalAccessException e) {
//                e.printStackTrace();
//            }
//            //catch (InvocationTargetException e) {
//            //e.printStackTrace();
//            // }
//            catch (InstantiationException e) {
//                e.printStackTrace();
//            } catch (NoSuchFieldException e) {
//                //LOG.error("请检查schema中的field是否不存在于PO类中.", e);
//                e.printStackTrace();
//            }
//        }
//        //LOG.warn("solrDocument is null.");
//        return null;
//    }
//
//
//    /**
//     * 批量转换, 将solrDocumentList转换为实体类 List [测试通过]
//     *
//     * @author pudongping
//     *
//     * @param documents
//     *                         solrDocumentList对象
//     * @param clzz
//     *                         泛型类
//     *
//     * @return List<T>
//     *
//     */
//    public static <T>List<T> solrDocument2Entity(SolrDocumentList documents, Class<T> clzz) {
//        if (null != documents && documents.size() > 0) {
//            List<T> lists = new ArrayList<T>();
//            for (SolrDocument sd : documents) {
//                Object obj = solrDocument2Entity(sd, clzz);
//                if (null!=obj) {
//                    lists.add(clzz.cast(obj));
//                }
//            }
//            return lists;
//        }
//        //LOG.warn("即将要转换的solrDocumentList为null或者size为0.");
//        return null;
//    }
}
